home *** CD-ROM | disk | FTP | other *** search
/ Mac Format 1994 October / Macformat17.cdr / Shareware City / Developers / shutdown-fx-20-c / sfx control app ƒ / Shell ƒ / error.c < prev    next >
Text File  |  1994-07-11  |  3KB  |  95 lines

  1. /**********************************************************************\
  2.  
  3. File:        error.c
  4.  
  5. Purpose:    This module handles altering the user when an error has
  6.             occurred.  (If the program is currently in the background,
  7.             we use the Notification Manager to queue a notification
  8.             request and display the alert as soon as we are in the
  9.             foreground -- see main.c, DispatchEvents, case osEvt.)
  10.  
  11. This program is free software; you can redistribute it and/or modify
  12. it under the terms of the GNU General Public License as published by
  13. the Free Software Foundation; either version 2 of the License, or
  14. (at your option) any later version.
  15.  
  16. This program is distributed in the hope that it will be useful,
  17. but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. GNU General Public License for more details.
  20.  
  21. You should have received a copy of the GNU General Public License
  22. along with this program in a file named "GNU General Public License".
  23. If not, write to the Free Software Foundation, 675 Mass Ave,
  24. Cambridge, MA 02139, USA.
  25.  
  26. \**********************************************************************/
  27.  
  28. #include "error.h"
  29. #include "main.h"
  30. #include "dialogs.h"
  31. #include "environment.h"
  32. #include "util.h"
  33.  
  34. NMRec            gMyNotification;
  35. enum ErrorTypes    gPendingResultCode;
  36. Boolean            gUsePendingParams;
  37. Boolean            gPendingETS;
  38.  
  39. static    Str255            gParam1, gParam2, gParam3;
  40.  
  41. void SetErrorParameters(Str255 p1, Str255 p2, Str255 p3)
  42. {
  43.     Mymemcpy(gParam1, p1, p1[0]+1);
  44.     Mymemcpy(gParam2, p2, p2[0]+1);
  45.     Mymemcpy(gParam3, p3, p3[0]+1);
  46. }
  47.  
  48. void HandleError(enum ErrorTypes resultCode, Boolean exitToShell, Boolean useParams)
  49. /* if we're in the foreground, just get the error string (from the .rsrc file) and
  50.    display the error alert; otherwise, we have to queue it, put up a notification
  51.    (if possible), and wait patiently to come back in the foreground.  (see main.c,
  52.    DispatchEvents(), case osEvt. */
  53. /* All error codes are listed in program globals.h */
  54. {
  55.     Str255            tempStr;
  56.     Handle            myResHand;
  57.     
  58.     /* if there is no error, or the error is that the user cancelled an operation
  59.        in progress, don't display anything; it would only confuse them. */
  60.     if ((resultCode==userCancelErr) || (resultCode==allsWell)) return;
  61.     
  62.     if (gIsInBackground)    /* if program is in background, can't display alert immed. */
  63.     {
  64.         if (gHasNotificationManager)    /* if they don't have notification, f*ck 'em */
  65.         {
  66.             myResHand=GetResource('SICN', 1234);    /* small icon for menu bar flashing */
  67.             gMyNotification.qType=nmType;            /* for more detail on these params, */
  68.             gMyNotification.nmMark=1;                /* see IM Processes, 5-8 */
  69.             gMyNotification.nmIcon=myResHand;
  70.             gMyNotification.nmSound=(Handle)-1L;
  71.             gMyNotification.nmStr=0L;
  72.             gMyNotification.nmResp=0L;
  73.             gMyNotification.nmRefCon=0L;
  74.             NMInstall(&gMyNotification);
  75.         }
  76.         gPendingResultCode=resultCode;                /* remember error code for later */
  77.         gUsePendingParams=useParams;                /* remember for later */
  78.         gPendingETS=exitToShell;                    /* remember for later */
  79.     }
  80.     else
  81.     {
  82.         GetIndString(tempStr, 129, resultCode);    /* get error string from .rsrc */
  83.         if (!useParams)
  84.             ParamText(tempStr, "\p", "\p", "\p");
  85.         else
  86.             ParamText(tempStr, gParam1, gParam2, gParam3);
  87.         
  88.         PositionDialog('ALRT', largeAlert);        /* position alert (see dialogs.c) */
  89.         StopAlert(largeAlert, 0L);                /* show it */
  90.     }
  91.     
  92.     if (exitToShell)        /* for fatal errors */
  93.         ExitToShell();
  94. }
  95.